LCD library

Basic routines for interfacing a HD44780U-based text LCD display. More...

Functions

void lcd_init (uint8_t dispAttr)
 Initialize display and select type of cursor.
void lcd_clrscr (void)
 Clear display and set cursor to home position.
void lcd_home (void)
 Set cursor to home position.
void lcd_gotoxy (uint8_t x, uint8_t y)
 Set cursor to specified position.
void lcd_putc (char c)
 Display character at current cursor position.
void lcd_puts (const char *s)
 Display string without auto linefeed.
void lcd_puts_p (const char *progmem_s)
 Display string from program memory without auto linefeed.
void lcd_command (uint8_t cmd)
 Send LCD controller instruction command.
void lcd_data (uint8_t data)
 Send data byte to LCD controller.
#define lcd_puts_P(__s)   lcd_puts_p(PSTR(__s))
 macros for automatically storing string constant in program memory

Definitions for MCU Clock Frequency

Adapt the MCU clock frequency in Hz to your target.

#define XTAL   4000000

Definition for LCD controller type

Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.

#define LCD_CONTROLLER_KS0073   0

Definitions for Display Size

Change these definitions to adapt setting to your display

#define LCD_LINES   4
#define LCD_DISP_LENGTH   20
#define LCD_LINE_LENGTH   0x40
#define LCD_START_LINE1   0x00
#define LCD_START_LINE2   0x14
#define LCD_START_LINE3   0x40
#define LCD_START_LINE4   0x54
#define LCD_WRAP_LINES   0
#define LCD_IO_MODE   1

Definitions for 4-bit IO mode

Change LCD_PORT if you want to use a different port for the LCD pins.

The four LCD data lines and the three control lines RS, RW, E can be on the same port or on different ports. Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on different ports.

Normally the four data lines should be mapped to bit 0..3 on one port, but it is possible to connect these data lines in different order or even on different ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.

#define LCD_PORT   PORTA
#define LCD_DATA0_PORT   LCD_PORT
#define LCD_DATA1_PORT   LCD_PORT
#define LCD_DATA2_PORT   LCD_PORT
#define LCD_DATA3_PORT   LCD_PORT
#define LCD_DATA0_PIN   0
#define LCD_DATA1_PIN   1
#define LCD_DATA2_PIN   2
#define LCD_DATA3_PIN   3
#define LCD_RS_PORT   LCD_PORT
#define LCD_RS_PIN   4
#define LCD_RW_PORT   LCD_PORT
#define LCD_RW_PIN   5
#define LCD_E_PORT   LCD_PORT
#define LCD_E_PIN   6

Definitions for LCD command instructions

The constants define the various LCD controller instructions which can be passed to the function lcd_command(), see HD44780 data sheet for a complete description.

#define LCD_CLR   0
#define LCD_HOME   1
#define LCD_ENTRY_MODE   2
#define LCD_ENTRY_INC   1
#define LCD_ENTRY_SHIFT   0
#define LCD_ON   3
#define LCD_ON_DISPLAY   2
#define LCD_ON_CURSOR   1
#define LCD_ON_BLINK   0
#define LCD_MOVE   4
#define LCD_MOVE_DISP   3
#define LCD_MOVE_RIGHT   2
#define LCD_FUNCTION   5
#define LCD_FUNCTION_8BIT   4
#define LCD_FUNCTION_2LINES   3
#define LCD_FUNCTION_10DOTS   2
#define LCD_CGRAM   6
#define LCD_DDRAM   7
#define LCD_BUSY   7
#define LCD_ENTRY_DEC   0x04
#define LCD_ENTRY_DEC_SHIFT   0x05
#define LCD_ENTRY_INC_   0x06
#define LCD_ENTRY_INC_SHIFT   0x07
#define LCD_DISP_OFF   0x08
#define LCD_DISP_ON   0x0C
#define LCD_DISP_ON_BLINK   0x0D
#define LCD_DISP_ON_CURSOR   0x0E
#define LCD_DISP_ON_CURSOR_BLINK   0x0F
#define LCD_MOVE_CURSOR_LEFT   0x10
#define LCD_MOVE_CURSOR_RIGHT   0x14
#define LCD_MOVE_DISP_LEFT   0x18
#define LCD_MOVE_DISP_RIGHT   0x1C
#define LCD_FUNCTION_4BIT_1LINE   0x20
#define LCD_FUNCTION_4BIT_2LINES   0x28
#define LCD_FUNCTION_8BIT_1LINE   0x30
#define LCD_FUNCTION_8BIT_2LINES   0x38
#define LCD_MODE_DEFAULT   ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC) )

Detailed Description

Basic routines for interfacing a HD44780U-based text LCD display.

 #include <lcd.h> 

Originally based on Volker Oth's LCD library, changed lcd_init(), added additional constants for lcd_command(), added 4-bit I/O mode, improved and optimized code.

Library can be operated in memory mapped mode (LCD_IO_MODE=0) or in 4-bit IO port mode (LCD_IO_MODE=1). 8-bit IO port mode not supported.

Memory mapped mode compatible with Kanda STK200, but supports also generation of R/W signal through A8 address line.

Author:
Peter Fleury pfleury@gmx.ch http://jump.to/fleury
See also:
The chapter Interfacing a HD44780 Based LCD to an AVR on my home page.
 #include <led.h.h> 

Define Documentation

#define LCD_BUSY   7

Definition at line 151 of file lcd.h.

Referenced by lcd_waitbusy().

#define LCD_CGRAM   6

Definition at line 149 of file lcd.h.

#define LCD_CLR   0

Definition at line 133 of file lcd.h.

Referenced by lcd_clrscr().

#define LCD_CONTROLLER_KS0073   0

Use 0 for HD44780 controller, 1 for KS0073 controller

Definition at line 54 of file lcd.h.

#define LCD_DATA0_PIN   0

pin for 4bit data bit 0

Definition at line 100 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA0_PORT   LCD_PORT

port for 4bit data bit 0

Definition at line 96 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA1_PIN   1

pin for 4bit data bit 1

Definition at line 101 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA1_PORT   LCD_PORT

port for 4bit data bit 1

Definition at line 97 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA2_PIN   2

pin for 4bit data bit 2

Definition at line 102 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA2_PORT   LCD_PORT

port for 4bit data bit 2

Definition at line 98 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA3_PIN   3

pin for 4bit data bit 3

Definition at line 103 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DATA3_PORT   LCD_PORT

port for 4bit data bit 3

Definition at line 99 of file lcd.h.

Referenced by lcd_init(), lcd_read(), and lcd_write().

#define LCD_DDRAM   7

Definition at line 150 of file lcd.h.

Referenced by lcd_gotoxy(), lcd_newline(), and lcd_putc().

#define LCD_DISP_LENGTH   20

visibles characters per line of the display

Definition at line 61 of file lcd.h.

Referenced by lcd_putc().

#define LCD_DISP_OFF   0x08

Definition at line 160 of file lcd.h.

Referenced by lcd_init().

#define LCD_DISP_ON   0x0C

Definition at line 161 of file lcd.h.

Referenced by InitLCDText().

#define LCD_DISP_ON_BLINK   0x0D

Definition at line 162 of file lcd.h.

#define LCD_DISP_ON_CURSOR   0x0E

Definition at line 163 of file lcd.h.

#define LCD_DISP_ON_CURSOR_BLINK   0x0F

Definition at line 164 of file lcd.h.

#define LCD_E_PIN   6

pin for Enable line

Definition at line 109 of file lcd.h.

Referenced by lcd_init().

#define LCD_E_PORT   LCD_PORT

port for Enable line

Definition at line 108 of file lcd.h.

Referenced by lcd_init().

#define LCD_ENTRY_DEC   0x04

Definition at line 154 of file lcd.h.

#define LCD_ENTRY_DEC_SHIFT   0x05

Definition at line 155 of file lcd.h.

#define LCD_ENTRY_INC   1

Definition at line 136 of file lcd.h.

#define LCD_ENTRY_INC_   0x06

Definition at line 156 of file lcd.h.

#define LCD_ENTRY_INC_SHIFT   0x07

Definition at line 157 of file lcd.h.

#define LCD_ENTRY_MODE   2

Definition at line 135 of file lcd.h.

#define LCD_ENTRY_SHIFT   0

Definition at line 137 of file lcd.h.

#define LCD_FUNCTION   5

Definition at line 145 of file lcd.h.

#define LCD_FUNCTION_10DOTS   2

Definition at line 148 of file lcd.h.

#define LCD_FUNCTION_2LINES   3

Definition at line 147 of file lcd.h.

#define LCD_FUNCTION_4BIT_1LINE   0x20

Definition at line 173 of file lcd.h.

#define LCD_FUNCTION_4BIT_2LINES   0x28

Definition at line 174 of file lcd.h.

#define LCD_FUNCTION_8BIT   4

Definition at line 146 of file lcd.h.

#define LCD_FUNCTION_8BIT_1LINE   0x30

Definition at line 175 of file lcd.h.

Referenced by lcd_init().

#define LCD_FUNCTION_8BIT_2LINES   0x38

Definition at line 176 of file lcd.h.

#define LCD_HOME   1

Definition at line 134 of file lcd.h.

Referenced by lcd_home().

#define LCD_IO_MODE   1

0: memory mapped mode, 1: IO port mode

Definition at line 79 of file lcd.h.

#define LCD_LINE_LENGTH   0x40

internal line length of the display

Definition at line 62 of file lcd.h.

#define LCD_LINES   4

number of visible lines of the display

Definition at line 60 of file lcd.h.

#define LCD_MODE_DEFAULT   ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC) )

Definition at line 179 of file lcd.h.

Referenced by lcd_init().

#define LCD_MOVE   4

Definition at line 142 of file lcd.h.

#define LCD_MOVE_CURSOR_LEFT   0x10

Definition at line 167 of file lcd.h.

#define LCD_MOVE_CURSOR_RIGHT   0x14

Definition at line 168 of file lcd.h.

#define LCD_MOVE_DISP   3

Definition at line 143 of file lcd.h.

#define LCD_MOVE_DISP_LEFT   0x18

Definition at line 169 of file lcd.h.

#define LCD_MOVE_DISP_RIGHT   0x1C

Definition at line 170 of file lcd.h.

#define LCD_MOVE_RIGHT   2

Definition at line 144 of file lcd.h.

#define LCD_ON   3

Definition at line 138 of file lcd.h.

#define LCD_ON_BLINK   0

Definition at line 141 of file lcd.h.

#define LCD_ON_CURSOR   1

Definition at line 140 of file lcd.h.

#define LCD_ON_DISPLAY   2

Definition at line 139 of file lcd.h.

#define LCD_PORT   PORTA

port for the LCD lines

Definition at line 95 of file lcd.h.

#define lcd_puts_P ( __s   )     lcd_puts_p(PSTR(__s))

macros for automatically storing string constant in program memory

Definition at line 271 of file lcd.h.

#define LCD_RS_PIN   4

pin for RS line

Definition at line 105 of file lcd.h.

Referenced by lcd_init().

#define LCD_RS_PORT   LCD_PORT

port for RS line

Definition at line 104 of file lcd.h.

Referenced by lcd_init().

#define LCD_RW_PIN   5

pin for RW line

Definition at line 107 of file lcd.h.

Referenced by lcd_init().

#define LCD_RW_PORT   LCD_PORT

port for RW line

Definition at line 106 of file lcd.h.

Referenced by lcd_init().

#define LCD_START_LINE1   0x00

DDRAM address of first char of line 1

Definition at line 65 of file lcd.h.

Referenced by lcd_gotoxy(), lcd_newline(), and lcd_putc().

#define LCD_START_LINE2   0x14

DDRAM address of first char of line 2

Definition at line 66 of file lcd.h.

Referenced by lcd_gotoxy(), lcd_newline(), and lcd_putc().

#define LCD_START_LINE3   0x40

DDRAM address of first char of line 3

Definition at line 67 of file lcd.h.

Referenced by lcd_gotoxy(), lcd_newline(), and lcd_putc().

#define LCD_START_LINE4   0x54

DDRAM address of first char of line 4

Definition at line 68 of file lcd.h.

Referenced by lcd_gotoxy(), lcd_newline(), and lcd_putc().

#define LCD_WRAP_LINES   0

0: no wrap, 1: wrap at end of visibile line

Definition at line 76 of file lcd.h.

#define XTAL   4000000

clock frequency in Hz, used to calculate delay timer

Definition at line 47 of file lcd.h.


Function Documentation

void lcd_clrscr ( void   ) 

Clear display and set cursor to home position.

Parameters:
void 
Returns:
none

Definition at line 417 of file lcd.c.

References LCD_CLR, and lcd_command().

void lcd_command ( uint8_t  cmd  ) 

Send LCD controller instruction command.

Parameters:
cmd instruction to send to LCD controller, see HD44780 data sheet
Returns:
none

Definition at line 355 of file lcd.c.

References lcd_waitbusy(), and lcd_write().

void lcd_data ( uint8_t  data  ) 

Send data byte to LCD controller.

Similar to lcd_putc(), but without interpreting LF

Parameters:
data byte to send to LCD controller, see HD44780 data sheet
Returns:
none

Definition at line 367 of file lcd.c.

References lcd_waitbusy(), and lcd_write().

void lcd_gotoxy ( uint8_t  x,
uint8_t  y 
)

Set cursor to specified position.

Parameters:
x horizontal position
(0: left most position)
y vertical position
(0: first line)
Returns:
none

Definition at line 381 of file lcd.c.

References lcd_command(), LCD_DDRAM, LCD_START_LINE1, LCD_START_LINE2, LCD_START_LINE3, and LCD_START_LINE4.

void lcd_home ( void   ) 

Set cursor to home position.

Parameters:
void 
Returns:
none

Definition at line 426 of file lcd.c.

References lcd_command(), and LCD_HOME.

void lcd_init ( uint8_t  dispAttr  ) 

Initialize display and select type of cursor.

Parameters:
dispAttr LCD_DISP_OFF display off
LCD_DISP_ON display on, cursor off
LCD_DISP_ON_CURSOR display on, cursor on
LCD_DISP_ON_CURSOR_BLINK display on, cursor on flashing
Returns:
none

Definition at line 521 of file lcd.c.

References DDR, delay, lcd_clrscr(), lcd_command(), LCD_DATA0_PIN, LCD_DATA0_PORT, LCD_DATA1_PIN, LCD_DATA1_PORT, LCD_DATA2_PIN, LCD_DATA2_PORT, LCD_DATA3_PIN, LCD_DATA3_PORT, LCD_DISP_OFF, LCD_E_PIN, LCD_E_PORT, lcd_e_toggle, LCD_FUNCTION_8BIT_1LINE, LCD_FUNCTION_DEFAULT, LCD_MODE_DEFAULT, LCD_RS_PIN, LCD_RS_PORT, LCD_RW_PIN, LCD_RW_PORT, and lcd_write().

void lcd_putc ( char  c  ) 

Display character at current cursor position.

Parameters:
c character to be displayed
Returns:
none

Definition at line 437 of file lcd.c.

References LCD_DDRAM, LCD_DISP_LENGTH, lcd_newline(), LCD_START_LINE1, LCD_START_LINE2, LCD_START_LINE3, LCD_START_LINE4, lcd_waitbusy(), and lcd_write().

void lcd_puts ( const char *  s  ) 

Display string without auto linefeed.

Parameters:
s string to be displayed
Returns:
none

Definition at line 484 of file lcd.c.

References lcd_putc().

void lcd_puts_p ( const char *  progmem_s  ) 

Display string from program memory without auto linefeed.

Parameters:
s string from program memory be be displayed
Returns:
none
See also:
lcd_puts_P

Definition at line 501 of file lcd.c.

References lcd_putc().


Generated on Fri Aug 17 13:50:57 2007 for GPS TRACE by  doxygen 1.5.3